#!/usr/bin/env python
# coding:utf-8
'''
edit_excel.py



#删除含指定文字的列
python3.6.2

'''

from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.writer.excel import ExcelWriter

# windows才用下面这样的路径
# wb = load_workbook ('C:\\Users\\elan\\Desktop\\python\\2.xlsx')

wb = load_workbook('example.xlsx')

ws = wb['Sheet1']
sheet = wb.active

# 如果第8行有：层次，子项物料代码，物料名称，规格型号，常用单位，常用用量，位置号，认证信息
# user_input = input ()
user_input = ['层次', '子项物料代码', '物料名称', '规格型号', '常用单位', '常用用量', '位置号', '认证信息']

# 判断删除行还是列，单选
del_row = 'True'  # 为TRUE删除行否则删除列
del_col = 'False'  # 为TRUE删除列否则删除行
# 如果上面是单选则不需要下面这个判断
if del_row == True:
    del_col = False
else:
    del_col = True

# 代表最大行的数字赋给变量
row_num = ws.max_row
# 代表最大列的数字赋给变量
col_num = ws.max_column

# 创建一个list倒序函数
def list_reverse(rev_value):

    # 判断传人的值是否是列表，不是就转成列表
    if isinstance(rev_value, list) == False:
        revlist = list(rev_value)
    else:
        revlist = rev_value
    rev_len = len(revlist)
    rev_list = []

    for i in range(rev_len - 1, -1, -1):
        rev_list.append(revlist[i])

        # print('\n')
    return rev_list

list_re = list_reverse(ws.columns)
print('有' + str(len(list_re)) + '列，倒序后的列是：' + str(list_re))

# 判断是否选择了删除列
if del_col == True:
    # 遍历列
    # 这里得到的值是这样子的<Cell 'Sheet1'.A1>元组对象
    list_num = 0
    reverse_col_list = []

    col_list = list(ws.columns)
    print('列列表：' + str(col_list))

    # 这是从第一列开始，所以在里面是倒序不了列的，里面是在第一列里进行操作，而不是在所有列里操作
    # for col in ws.columns:
    for col in list_re:
        print('col value is:' + str(col) + '\n')

        print('\n')
        col_values = []

        for cell in col:

            print(cell.coordinate + 'col cell is: ' + str(cell.value))
            # 输出的是该列的所有的单元格名和单元格的值
            col_values.append(cell.value)  # 不断加入同个列表


        print(str(cell.column) + ' column values is: ' + str(col_values))

        
        compare = [x for x in user_input if x in col_values]
        if compare == []:
            # 删除列
            print('\n需要删除列：', cell.column)
            # ws.delete_cols(ws.column,1)
            # 删除列放这里只有第一个会正确删除
            # 用倒序后列的序号去删除没有倒序的表后面的列，即从后面考试删除
            ws.delete_cols(cell.column, 1)  #


# 对被删除列后的表保存
wb.save('back_example.xlsx')

